﻿#region << 版 本 注 释 >>
/*
 * ========================================================================
 * Copyright(c) 北京天大天科科技发展有限公司, All Rights Reserved.
 * ========================================================================
 *  
 * 【当前类文件的功能】
 *  正则表达式帮助类
 *  
 * CLR版本：4.0.30319.34014
 * 作者：杨朋飞  时间：2015/4/16 22:13:37
 * 文件名：RegexHelper
 * 版本：V1.0.0
 * 
 * 修改者：           时间：               
 * 修改说明：
 * ========================================================================
*/
#endregion

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace YPF_CommonMethod
{
    public static class RegexHelper
    {

        #region 验证字符串是否是纯数字

        /// <summary>
        /// 验证字符串是否是纯数字
        /// </summary>
        /// <param name="strRegex">需要验证的字符串</param>
        /// <returns></returns>
        public static bool CheckIsNumber(string strRegex)
        {
            Regex regex = new Regex("^[0-9]*$");
            Match m = regex.Match(strRegex);
            if (!m.Success)
            {
                return false;
            }
            else
            {
                return true;
            }
        }

        #endregion

        #region 验证字符串整数或小数

        /// <summary>
        /// 验证字符串整数或小数
        /// </summary>
        /// <param name="strRegex">需要验证的字符串</param>
        /// <returns></returns>
        public static bool CheckIsNumberOrFloat(string strRegex)
        {
            Regex regex = new Regex(@"^[0-9]+\.{0,1}[0-9]{0,2}$");
            Match m = regex.Match(strRegex);
            if (!m.Success)
            {
                return false;
            }
            else
            {
                return true;
            }
        }

        #endregion

        #region 只能输入n位的数字

        /// <summary>
        /// 只能输入n位的数字
        /// </summary>
        /// <param name="strRegex">需要验证的字符串</param>
        /// <param name="n">位数</param>
        /// <returns></returns>
        public static bool CheckIsOnleLengthNumber(string strRegex, int n)
        {
            Regex regex = new Regex(@"^\d{" + n + "}$");
            Match m = regex.Match(strRegex);
            if (!m.Success)
            {
                return false;
            }
            else
            {
                return true;
            }
        }

        #endregion

        #region 只能输入至少n位的数字

        /// <summary>
        /// 只能输入至少n位的数字
        /// </summary>
        /// <param name="strRegex">需要验证的字符串</param>
        /// <param name="n">最少位</param>
        /// <returns></returns>
        public static bool CheckIsLengthNumber(string strRegex, int n)
        {
            Regex regex = new Regex(@"^\d{" + n + ",}$");
            Match m = regex.Match(strRegex);
            if (!m.Success)
            {
                return false;
            }
            else
            {
                return true;
            }
        }

        #endregion

        #region 只能输入n1到n2位的数字；例如：最少1位，最多10位数字

        /// <summary>
        /// 只能输入n1到n2位的数字；例如：最少1位，最多10位数字
        /// </summary>
        /// <param name="strRegex">需要验证的字符串</param>
        /// <param name="n1">最少位</param>
        /// <param name="n2">最多位</param>
        /// <returns></returns>
        public static bool CheckIsLengthNumber(string strRegex, int n1, int n2)
        {
            Regex regex = new Regex(@"^\d{" + n1 + "," + n2 + "}$");
            Match m = regex.Match(strRegex);
            if (!m.Success)
            {
                return false;
            }
            else
            {
                return true;
            }
        }

        #endregion

        #region 只能输入有两位小数的正实数

        /// <summary>
        /// 只能输入有两位小数的正实数
        /// </summary>
        /// <param name="strRegex">需要验证的字符串</param>
        /// <returns></returns>
        public static bool CheckIsTwoXiaoShu(string strRegex)
        {
            Regex regex = new Regex("^[0-9]+(.[0-9]{2})?$");
            Match m = regex.Match(strRegex);
            if (!m.Success)
            {
                return false;
            }
            else
            {
                return true;
            }
        }

        #endregion

        #region 只能输入由26个英文字母组成的字符串（包括大小写）

        /// <summary>
        /// 只能输入由26个英文字母组成的字符串（包括大小写）
        /// </summary>
        /// <param name="strRegex">需要验证的字符串</param>
        /// <returns></returns>
        public static bool CheckStrIsEnglish(string strRegex)
        {
            Regex regex = new Regex("^[A-Za-z]+$");
            Match m = regex.Match(strRegex);
            if (!m.Success)
            {
                return false;
            }
            else
            {
                return true;
            }
        }

        #endregion

        #region 只能输入由26个大写英文字母组成的字符串

        /// <summary>
        /// 只能输入由26个大写英文字母组成的字符串
        /// </summary>
        /// <param name="strRegex">需要验证的字符串</param>
        /// <returns></returns>
        public static bool CheckStrIsUpperEnglish(string strRegex)
        {
            Regex regex = new Regex("^[A-Z]+$");
            Match m = regex.Match(strRegex);
            if (!m.Success)
            {
                return false;
            }
            else
            {
                return true;
            }
        }

        #endregion

        #region 只能输入由26个小写英文字母组成的字符串

        /// <summary>
        /// 只能输入由26个小写英文字母组成的字符串
        /// </summary>
        /// <param name="strRegex">需要验证的字符串</param>
        /// <returns></returns>
        public static bool CheckStrIsLowerEnglish(string strRegex)
        {
            Regex regex = new Regex("^[a-z]+$");
            Match m = regex.Match(strRegex);
            if (!m.Success)
            {
                return false;
            }
            else
            {
                return true;
            }
        }

        #endregion

        #region 只能输入由数字和26个英文字母组成的字符串(包括大小写)

        /// <summary>
        ///只能输入由数字和26个英文字母组成的字符串(包括大小写)
        /// </summary>
        /// <param name="strRegex">需要验证的字符串</param>
        /// <returns></returns>
        public static bool CheckStrIsNumberAndABC(string strRegex)
        {
            Regex regex = new Regex("^[A-Za-z0-9]+$");
            Match m = regex.Match(strRegex);
            if (!m.Success)
            {
                return false;
            }
            else
            {
                return true;
            }
        }

        #endregion

        #region 只能输入由数字、26个英文字母或者下划线组成的字符串

        /// <summary>
        ///只能输入由数字、26个英文字母或者下划线组成的字符串
        /// </summary>
        /// <param name="strRegex">需要验证的字符串</param>
        /// <returns></returns>
        public static bool CheckString(string strRegex)
        {
            Regex regex = new Regex(@"^\w+$");
            Match m = regex.Match(strRegex);
            if (!m.Success)
            {
                return false;
            }
            else
            {
                return true;
            }
        }

        #endregion

        #region 验证用户密码：正确格式为：以字母开头，长度在6~18之间，只能包含字符、数字和下划线

        /// <summary>
        ///验证用户密码：正确格式为：以字母开头，长度在6~18之间，只能包含字符、数字和下划线
        /// </summary>
        /// <param name="strRegex">需要验证的字符串</param>
        /// <returns></returns>
        public static bool CheckPassWord(string strRegex)
        {
            Regex regex = new Regex(@"^[a-zA-Z]\w{5,17}$");
            Match m = regex.Match(strRegex);
            if (!m.Success)
            {
                return false;
            }
            else
            {
                return true;
            }
        }

        #endregion

        #region 只能输入汉字

        /// <summary>
        ///只能输入汉字
        /// </summary>
        /// <param name="strRegex">需要验证的字符串</param>
        /// <returns></returns>
        public static bool CheckZh(string strRegex)
        {
            Regex regex = new Regex(@"^[\u4e00-\u9fa5]{0,}$");
            Match m = regex.Match(strRegex);
            if (!m.Success)
            {
                return false;
            }
            else
            {
                return true;
            }
        }

        #endregion

        #region 验证Email地址

        /// <summary>
        ///验证Email地址
        /// </summary>
        /// <param name="strRegex">需要验证的字符串</param>
        /// <returns></returns>
        public static bool CheckEmail(string strRegex)
        {
            Regex regex = new Regex(@"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$");
            Match m = regex.Match(strRegex);
            if (!m.Success)
            {
                return false;
            }
            else
            {
                return true;
            }
        }

        #endregion

        #region 验证InternetURL

        /// <summary>
        ///验证InternetURL
        /// </summary>
        /// <param name="strRegex">需要验证的字符串</param>
        /// <returns></returns>
        public static bool CheckInternetUrl(string strRegex)
        {
            Regex regex = new Regex(@"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$");
            Match m = regex.Match(strRegex);
            if (!m.Success)
            {
                return false;
            }
            else
            {
                return true;
            }
        }

        #endregion

        #region 验证身份证号

        /// <summary>
        /// 使用正则表达式验证是否是身份证，包含以下三种情况：
        ///     (1):身份证号码为15位数字
        ///     (2):身份证号码为18位数字
        ///     (3):身份证号码为17位数字+1个字母
        /// </summary>
        /// <param name="strRegex">需要验证的字符串</param>
        /// <returns></returns>
        public static bool CheckIsIdentityCard(string strRegex)
        {
            Regex regex = new Regex(@"^(^\d{15}$|^\d{18}$|^\d{17}(\d|X|x))$");
            Match m = regex.Match(strRegex);
            if (!m.Success)
            {
                return false;
            }
            else
            {
                return true;
            }
        }

        #endregion

        #region 验证一年的12个月;正确格式为："01"～"09"和"1"～"12"

        /// <summary>
        ///验证一年的12个月:正确格式为："01"～"09"和"1"～"12"
        /// </summary>
        /// <param name="strRegex">需要验证的字符串</param>
        /// <returns></returns>
        public static bool CheckYear(string strRegex)
        {
            Regex regex = new Regex(@"^(0?[1-9]|1[0-2])$");
            Match m = regex.Match(strRegex);
            if (!m.Success)
            {
                return false;
            }
            else
            {
                return true;
            }
        }

        #endregion

        #region 验证一个月的31天;正确格式为；"01"～"09"和"1"～"31"

        /// <summary>
        ///验证一个月的31天;正确格式为；"01"～"09"和"1"～"31"
        /// </summary>
        /// <param name="strRegex">需要验证的字符串</param>
        /// <returns></returns>
        public static bool CheckMonth(string strRegex)
        {
            Regex regex = new Regex(@"^((0?[1-9])|((1|2)[0-9])|30|31)$");
            Match m = regex.Match(strRegex);
            if (!m.Success)
            {
                return false;
            }
            else
            {
                return true;
            }
        }

        #endregion

        #region 使用正则表达式验证是否是IP地址

        /// <summary>
        ///使用正则表达式验证是否是IP地址
        /// </summary>
        /// <param name="strRegex">需要验证的字符串</param>
        /// <returns></returns>
        public static bool IsIpAddress(string strRegex)
        {
            Regex regex = new Regex(@"^(\d(25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])\d\.){3}\d(25[0-5]|2[0-4][0-9]|1?[0-9]?[0-9])\d$");
            Match m = regex.Match(strRegex);
            if (!m.Success)
            {
                return false;
            }
            else
            {
                return true;
            }
        }

        #endregion

        #region 使用正则表达式验证是否Unicode字符串

        /// <summary>
        ///使用正则表达式验证是否Unicode字符串
        /// </summary>
        /// <param name="strRegex">需要验证的字符串</param>
        /// <returns></returns>
        public static bool IsUnicode(string strRegex)
        {
            Regex regex = new Regex(@"^[\u4E00-\u9FA5\uE815-\uFA29]+$");
            Match m = regex.Match(strRegex);
            if (!m.Success)
            {
                return false;
            }
            else
            {
                return true;
            }
        }

        #endregion

        #region 使用正则表达式验证是否是手机号码

        /// <summary>
        /// 使用正则表达式验证是否是手机号码
        /// </summary>
        /// <param name="strRegex">需要验证的字符串</param>
        /// <param name="isRestrict">是否按照严格的格式去验证</param>
        /// <returns></returns>
        public static bool IsMobileNumber(string strRegex, bool isRestrict = false)
        {
            string pattern = isRestrict ? @"^[1][3-8]\d{9}$" : @"^[1]\d{10}$";
            Regex regex = new Regex(pattern);
            Match match = regex.Match(strRegex);
            if (match.Success)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        #endregion

        #region 验证Decimal

        /// <summary>
        /// 验证Decimal
        /// </summary>
        /// <param name="strText">输入字符串</param>
        /// <returns></returns>
        public static bool IsDecimal(string strText)
        {
            Regex regDecimal = new Regex("^[0-9]+([.][0-9]{1,2})?$");
            return regDecimal.IsMatch(strText);
        }

        #endregion

    }
}
